home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 April: Mac OS SDK / Dev.CD Apr 96 SDK / Dev.CD Apr 96 SDK1.toast / Development Kits (Disc 1) / OpenDoc Development Framework / ODFDev / ODF / OS / FWODUtil / Sources / FWBArray.cpp < prev    next >
Encoding:
Text File  |  1995-11-08  |  6.5 KB  |  229 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWBArray.cpp
  4. //    Release Version:    $ 1.0d11 $
  5. //
  6. //    Copyright:    © 1995 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #include "FWOS.hpp"
  11.  
  12. #ifndef FWBARRAY_H
  13. #include "FWBArray.h"
  14. #endif
  15.  
  16. // ----- Foundation Includes -----
  17.  
  18. #ifndef   FWMEMMGR_H
  19. #include "FWMemMgr.h"
  20. #endif
  21.  
  22. //========================================================================================
  23. //    Runtime Informations
  24. //========================================================================================
  25.  
  26. #if FW_LIB_EXPORT_PRAGMAS
  27. #pragma lib_export on
  28. #endif
  29.  
  30. #ifdef FW_BUILD_MAC    
  31. #pragma segment fwodutil
  32. #endif
  33.  
  34. //========================================================================================
  35. //    class FW_CByteArray
  36. //========================================================================================
  37.  
  38. //----------------------------------------------------------------------------------------
  39. //    FW_CByteArray::FW_CByteArray
  40. //----------------------------------------------------------------------------------------
  41.  
  42. FW_CByteArray::FW_CByteArray() :
  43.     fOwnBuffer(TRUE),
  44.     fOffset(0)
  45. {
  46.     fODByteArray._buffer = (octet*)NULL;
  47.     fODByteArray._length = 0;
  48.     fODByteArray._maximum = 0;
  49.     
  50.     FW_END_CONSTRUCTOR
  51. }
  52.  
  53. //----------------------------------------------------------------------------------------
  54. //    FW_CByteArray::FW_CByteArray
  55. //----------------------------------------------------------------------------------------
  56.  
  57. FW_CByteArray::FW_CByteArray(void* buffer, unsigned long byteCount) :
  58.     fOwnBuffer(FALSE),
  59.     fOffset(0)
  60. {
  61.     fODByteArray._buffer = (octet*)buffer;
  62.     fODByteArray._length = byteCount;
  63.     fODByteArray._maximum = byteCount;
  64.     
  65.     FW_END_CONSTRUCTOR
  66. }
  67.  
  68. //----------------------------------------------------------------------------------------
  69. //    FW_CByteArray::FW_CByteArray
  70. //----------------------------------------------------------------------------------------
  71.  
  72. FW_CByteArray::FW_CByteArray(const void* buffer, unsigned long byteCount) :
  73.     fOwnBuffer(FALSE),
  74.     fOffset(0)
  75. {
  76.     fODByteArray._buffer = (octet*)buffer;
  77.     fODByteArray._length = byteCount;
  78.     fODByteArray._maximum = byteCount;
  79.     
  80.     FW_END_CONSTRUCTOR
  81. }
  82.  
  83. //----------------------------------------------------------------------------------------
  84. //    FW_CByteArray::FW_CByteArray
  85. //----------------------------------------------------------------------------------------
  86.  
  87. FW_CByteArray::FW_CByteArray(unsigned long byteCount) :
  88.     fOwnBuffer(TRUE),
  89.     fOffset(0)
  90. {
  91.     fODByteArray._buffer = NULL;    // so if AllocateBlock fails it is clean
  92.     if (byteCount != 0)
  93.         fODByteArray._buffer = (octet*)FW_CMemoryManager::AllocateBlock(byteCount);
  94.     
  95.     fODByteArray._length = byteCount;
  96.     fODByteArray._maximum = byteCount;
  97.     
  98.     FW_END_CONSTRUCTOR
  99. }
  100.  
  101. /*
  102. //----------------------------------------------------------------------------------------
  103. //    FW_CByteArray::FW_CByteArray
  104. //----------------------------------------------------------------------------------------
  105.  
  106. FW_CByteArray::FW_CByteArray(const FW_CByteArray& byteArray)
  107. {
  108.     fODByteArray._buffer = NULL;    // so if AllocateBlock fails it is clean
  109.     
  110.     PrivCopyByteArray(byteArray);
  111.     
  112.     FW_END_CONSTRUCTOR
  113. }
  114. */
  115.  
  116. //----------------------------------------------------------------------------------------
  117. //    FW_CByteArray::~FW_CByteArray
  118. //----------------------------------------------------------------------------------------
  119.  
  120. FW_CByteArray::~FW_CByteArray()
  121. {
  122.     FW_START_DESTRUCTOR
  123.     
  124.     PrivDisposeByteArray();
  125. }
  126.  
  127. /*
  128. //----------------------------------------------------------------------------------------
  129. //    FW_CByteArray::PrivCopyByteArray
  130. //----------------------------------------------------------------------------------------
  131.  
  132. void FW_CByteArray::PrivCopyByteArray(const FW_CByteArray& byteArray)
  133. {
  134.     fOwnBuffer = byteArray.fOwnBuffer;
  135.     fOffset = byteArray.fOffset;  // Not sure this is what we really want (MH)
  136.     if (fOwnBuffer)
  137.     {
  138.         fODByteArray._buffer = (octet*)FW_CMemoryManager::AllocateBlock(byteArray.fODByteArray._maximum);
  139.         FW_CMemoryManager::CopyMemory(byteArray.fODByteArray._buffer, 
  140.                                     fODByteArray._buffer,
  141.                                     byteArray.fODByteArray._length);
  142.     }
  143.     else
  144.         fODByteArray._buffer = byteArray.fODByteArray._buffer;
  145.     
  146.     fODByteArray._length = byteArray.fODByteArray._length;
  147.     fODByteArray._maximum = byteArray.fODByteArray._maximum;
  148. }
  149. */
  150.  
  151. //----------------------------------------------------------------------------------------
  152. //    FW_CByteArray::PrivDisposeByteArray
  153. //----------------------------------------------------------------------------------------
  154.  
  155. void FW_CByteArray::PrivDisposeByteArray()
  156. {
  157.     if (fOwnBuffer && fODByteArray._buffer != NULL)
  158.     {
  159.         FW_CMemoryManager::FreeBlock(fODByteArray._buffer);
  160.         fODByteArray._buffer = NULL;
  161.     }
  162.     fOwnBuffer = TRUE;
  163.     fODByteArray._length = 0;
  164.     fODByteArray._maximum = 0;
  165.     fOffset = 0;
  166. }
  167.  
  168. /*
  169. //----------------------------------------------------------------------------------------
  170. //    FW_CByteArray::operator=
  171. //----------------------------------------------------------------------------------------
  172.  
  173. FW_CByteArray& FW_CByteArray::operator=(const FW_CByteArray& byteArray)
  174. {
  175.     PrivDisposeByteArray();
  176.     
  177.     PrivCopyByteArray(byteArray);
  178.     
  179.     return *this;
  180. }
  181. */
  182.  
  183. //----------------------------------------------------------------------------------------
  184. //    FW_CByteArray::Set
  185. //----------------------------------------------------------------------------------------
  186.  
  187. void FW_CByteArray::Set(void* buffer, unsigned long byteCount)
  188. {
  189.     PrivDisposeByteArray();
  190.     
  191.     fOwnBuffer = FALSE;
  192.     fODByteArray._buffer = (octet*)buffer;
  193.     fODByteArray._length = byteCount;
  194.     fODByteArray._maximum = byteCount;    
  195. }
  196.  
  197. //----------------------------------------------------------------------------------------
  198. //    FW_CByteArray::Clear
  199. //----------------------------------------------------------------------------------------
  200.  
  201. void FW_CByteArray::Clear()
  202. {
  203.     PrivDisposeByteArray();
  204.     fOwnBuffer = TRUE;
  205. }
  206.  
  207. //----------------------------------------------------------------------------------------
  208. //    FW_CByteArray::Set
  209. //----------------------------------------------------------------------------------------
  210.  
  211. unsigned long FW_CByteArray::CopyBuffer(void *buffer, unsigned long byteCount)
  212. {
  213.     FW_ASSERT((fOffset < fODByteArray._length) || (fODByteArray._length == 0));
  214.     
  215.     unsigned long cnt = ((byteCount + fOffset) <= fODByteArray._length) ? byteCount : fODByteArray._length;
  216.     
  217.     FW_CMemoryManager::CopyMemory(    fODByteArray._buffer + fOffset,
  218.                                     buffer,
  219.                                     cnt);
  220.     fOffset += cnt;
  221.     
  222.     if (fOffset == fODByteArray._length)
  223.         PrivDisposeByteArray();
  224.     
  225.     return cnt;
  226. }
  227.     
  228.  
  229.